﻿using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Windows.Forms;

namespace 软构大作业
{
    public partial class Form16 : Form
    {
        private new AutoAdaptWindowsSize AutoSize;
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x02000000;
                return cp;
            }
        }
        private DataTable originalDataTable; // 保存原始数据用于搜索筛选

        public Form16()
        {
            InitializeComponent();
            ConfigureDataGridView();
            LoadUserData();

            // 绑定 TextChanged 事件到搜索框
            textBox1.TextChanged += TextBox1_TextChanged;
        }

        private void ConfigureDataGridView()
        {
            // 设置DataGridView选择模式为整行选择
            dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            // 点击单元格时选中整行
            dataGridView1.CellClick += (sender, e) => {
                if (e.RowIndex >= 0)
                {
                    dataGridView1.Rows[e.RowIndex].Selected = true;
                }
            };

            // 允许用户调整列宽
            dataGridView1.AllowUserToResizeColumns = true;
            // 禁用自动调整列宽模式
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
        }



        // 加载用户数据到DataGridView
        private void LoadUserData()
        {
            try
            {
                Data dao = new Data();
                // 修改SQL查询，只获取request为'Yes'的用户
                string sql = "SELECT user_id, username, phone, student_id, permission FROM library_db.users WHERE request = 'Yes' AND user_id IS NOT NULL";
                SqlDataReader reader = dao.read(sql);

                originalDataTable = new DataTable(); // 初始化原始数据表
                originalDataTable.Columns.Add("ID");
                originalDataTable.Columns.Add("姓名");
                originalDataTable.Columns.Add("电话");
                originalDataTable.Columns.Add("学号");
                originalDataTable.Columns.Add("借阅权限");

                while (reader.Read())
                {
                    DataRow row = originalDataTable.NewRow();
                    row["ID"] = reader["user_id"].ToString();
                    row["姓名"] = reader["username"].ToString();
                    row["电话"] = reader["phone"].ToString();
                    row["学号"] = reader["student_id"].ToString();
                    row["借阅权限"] = reader["permission"].ToString() == "True" ? "有" : "无";
                    originalDataTable.Rows.Add(row);
                }
                reader.Close();
                dao.DaoClose();

                // 初始显示所有数据（现在只包含request为Yes的用户）
                dataGridView1.DataSource = originalDataTable;

                // 设置列宽和显示属性
                ConfigureColumns();

                // 确保没有选中任何行
                dataGridView1.ClearSelection();

                dataGridView1.RowHeadersVisible = false;
                dataGridView1.AllowUserToAddRows = false;
                dataGridView1.ReadOnly = true;
                dataGridView1.ColumnHeadersDefaultCellStyle.Font = new Font("Microsoft YaHei", 10, FontStyle.Bold);

                // 设置行高和选中行颜色
                dataGridView1.RowTemplate.Height = 30;
                dataGridView1.DefaultCellStyle.SelectionBackColor = Color.LightBlue;
                dataGridView1.DefaultCellStyle.SelectionForeColor = Color.Black;

                // 启用文本自动换行
                dataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
            }
            catch (Exception ex)
            {
                MessageBox.Show("加载用户数据失败: " + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void ConfigureColumns()
        {
            // 设置各列宽度和属性
            dataGridView1.Columns["ID"].Width = 80;
            dataGridView1.Columns["姓名"].Width = 100;
            dataGridView1.Columns["电话"].Width = 150;  // 加宽电话列
            dataGridView1.Columns["学号"].Width = 150;  // 加宽学号列
            dataGridView1.Columns["借阅权限"].Width = 80;

            // 设置电话和学号列可以显示完整内容
            dataGridView1.Columns["电话"].DefaultCellStyle.WrapMode = DataGridViewTriState.True;
            dataGridView1.Columns["学号"].DefaultCellStyle.WrapMode = DataGridViewTriState.True;

            // 设置列的最小宽度
            foreach (DataGridViewColumn column in dataGridView1.Columns)
            {
                column.MinimumWidth = 50;
                column.SortMode = DataGridViewColumnSortMode.NotSortable;
            }
        }

        // 搜索框文本变化事件
        private void TextBox1_TextChanged(object sender, EventArgs e)
        {
            string searchText = textBox1.Text.Trim();

            // 如果搜索框为空，显示所有数据
            if (string.IsNullOrEmpty(searchText))
            {
                // 清空过滤条件，恢复显示所有数据
                DataView dv = originalDataTable.DefaultView;
                dv.RowFilter = string.Empty;  // 清空过滤器
                dataGridView1.DataSource = originalDataTable;
                return;
            }

            // 创建数据视图进行筛选
            DataView filteredView = originalDataTable.DefaultView;

            // 构建筛选条件，搜索ID、姓名、电话和学号
            string filter = $"ID LIKE '%{searchText}%' OR 姓名 LIKE '%{searchText}%' OR 电话 LIKE '%{searchText}%' OR 学号 LIKE '%{searchText}%'";
            filteredView.RowFilter = filter;

            // 应用筛选结果
            dataGridView1.DataSource = filteredView.ToTable();

            // 如果没有找到结果，显示提示
            if (dataGridView1.Rows.Count == 0)
            {
                MessageBox.Show("没有找到匹配的读者", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void Form16_FormClosed(object sender, FormClosedEventArgs e)
        {
            textBox1.Text = "";
            Global.Instance.form16login = null;
            Global.Instance.form7login.Show();
        }


        private void button3_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            Global.Instance.form16login.Hide();
            Global.Instance.form7login.Show();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count == 0)
            {
                MessageBox.Show("请先选择要处理申请的用户。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            DataGridViewRow selectedRow = dataGridView1.SelectedRows[0];
            string userId = selectedRow.Cells["ID"].Value.ToString(); // 获取用户ID
            string userName = selectedRow.Cells["姓名"].Value.ToString(); // 获取用户名，用于提示

            // 确认对话框，询问是否要将该用户的借阅资格申请标记为已处理 (request='No')
            // 同时，通常处理申请时，也会授予权限 (permission='True')
            DialogResult result = MessageBox.Show(
                $"确定要处理用户 [{userName}] 的借阅资格申请吗?\n" +
                "此操作会将该用户的申请状态更新为已处理，并授予其借阅权限。",
                "确认处理申请",
                MessageBoxButtons.YesNo,
                MessageBoxIcon.Question);

            if (result == DialogResult.Yes)
            {
                try
                {
                    // 使用参数化查询来防止SQL注入
                    string sqlUpdateRequest = "UPDATE library_db.users SET request = 'No', permission = 'True' WHERE user_id = @UserId";

                    // 使用 Data 类中的 ExecuteNonQuery 方法（如果它支持参数化查询）
                    // 假设你的 Data.ExecuteNonQuery 支持 SqlParameter[]
                    SqlParameter[] parameters = new SqlParameter[]
                    {
                new SqlParameter("@UserId", SqlDbType.Int) { Value = Convert.ToInt32(userId) }
                // 如果你的 user_id 在数据库中是其他类型（如NVarChar），请相应调整 SqlDbType
                    };

                    // 调用 Data 类的方法执行更新
                    // 如果你的 Data 类中没有类似 ExecuteNonQuery(string sql, SqlParameter[] parameters) 的方法，
                    // 你需要添加一个，或者直接在这里使用 SqlConnection 和 SqlCommand。
                    // 为了简单起见，这里假设你有一个可以执行带参数的非查询语句的方法。
                    // 以下是直接使用 SqlConnection 和 SqlCommand 的示例，如果你的 Data 类不支持参数化 ExecuteNonQuery：

                    int rowsAffected = 0;
                    string connectionString = "Server=localhost;Database=library_2;Trusted_Connection=true"; // 你的连接字符串
                    using (SqlConnection connection = new SqlConnection(connectionString))
                    {
                        using (SqlCommand command = new SqlCommand(sqlUpdateRequest, connection))
                        {
                            command.Parameters.AddWithValue("@UserId", Convert.ToInt32(userId));
                            connection.Open();
                            rowsAffected = command.ExecuteNonQuery();
                        }
                    }


                    if (rowsAffected > 0)
                    {
                        MessageBox.Show($"用户 [{userName}] 的借阅资格申请已成功处理，并已授予借阅权限。", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        // 刷新整个用户列表，因为被处理的用户将不再显示在 request='Yes' 的列表中
                        LoadUserData();
                    }
                    else
                    {
                        MessageBox.Show("处理申请失败，用户可能不存在或数据未被修改。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"处理申请时发生错误: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void Form16_Load(object sender, EventArgs e)
        {
            AutoSize = new AutoAdaptWindowsSize(this);
            this.SizeChanged += new EventHandler(Form_SizeChanged);
        }
        private void Form_SizeChanged(object sender, EventArgs e)
        {//窗体大小改变事件
            if (AutoSize != null) // 一定加这个判断，电脑缩放布局不是100%的时候，会报错
            {
                AutoSize.FormSizeChanged();
            }
        }
    }
}
